/**
 * bomb.js 炸弹定时器脚本
 * 
 * 功能：
 * 1. 编写Bomb构造函数
 * 2. 炸弹的 start 方法启动定时器，3 秒钟之后炸弹爆炸
 * 3. 炸弹的 clear 方法取消定时器
 * 4. 实例化两个定时炸弹对象：b1 和 b2
 * 5. b1 调用 start 方法
 * 6. b2 调用 start 方法
 * 7. b2 在 1 秒钟之后，调用 clear 方法
 * 8. 运行程序，测试程序的执行效果
 */

console.log('=== bomb.js 炸弹定时器脚本 ===\n');

// Bomb 构造函数
function Bomb(name) {
    this.name = name;
    this.timer = null;
    this.isActive = false;
    
    console.log(`💣 炸弹 ${this.name} 已创建`);
}

// Bomb 原型方法
Bomb.prototype = {
    // 启动定时器方法
    start: function() {
        if (this.isActive) {
            console.log(`⚠️  炸弹 ${this.name} 已经在运行中`);
            return;
        }
        
        console.log(`⏰ 炸弹 ${this.name} 已启动，3秒后爆炸！`);
        this.isActive = true;
        
        // 设置3秒定时器
        this.timer = setTimeout(() => {
            this.explode();
        }, 3000);
    },
    
    // 取消定时器方法
    clear: function() {
        if (!this.isActive) {
            console.log(`⚠️  炸弹 ${this.name} 没有在运行`);
            return;
        }
        
        if (this.timer) {
            clearTimeout(this.timer);
            this.timer = null;
            this.isActive = false;
            console.log(`✅ 炸弹 ${this.name} 已被成功拆除！`);
        }
    },
    
    // 爆炸方法
    explode: function() {
        console.log(`💥 炸弹 ${this.name} 爆炸了！！！`);
        this.isActive = false;
        this.timer = null;
    },
    
    // 获取状态方法
    getStatus: function() {
        return {
            name: this.name,
            isActive: this.isActive,
            hasTimer: this.timer !== null
        };
    }
};

// 主程序执行
console.log('🚀 开始执行炸弹测试程序...\n');

// 实例化两个定时炸弹对象
const b1 = new Bomb('B1');
const b2 = new Bomb('B2');

console.log('');

// 显示初始状态
console.log('📊 初始状态：');
console.log('B1 状态：', b1.getStatus());
console.log('B2 状态：', b2.getStatus());
console.log('');

// b1 调用 start 方法
console.log('🎯 启动 B1 炸弹...');
b1.start();
console.log('');

// b2 调用 start 方法
console.log('🎯 启动 B2 炸弹...');
b2.start();
console.log('');

// 显示启动后状态
console.log('📊 启动后状态：');
console.log('B1 状态：', b1.getStatus());
console.log('B2 状态：', b2.getStatus());
console.log('');

// b2 在 1 秒钟之后，调用 clear 方法
console.log('⏱️  1秒后将拆除 B2 炸弹...');
setTimeout(() => {
    console.log('🔧 正在拆除 B2 炸弹...');
    b2.clear();
    console.log('');
    
    // 显示拆除后状态
    console.log('📊 拆除后状态：');
    console.log('B1 状态：', b1.getStatus());
    console.log('B2 状态：', b2.getStatus());
    console.log('');
    
    // 等待 B1 爆炸
    console.log('⏳ 等待 B1 炸弹爆炸...');
    
}, 1000);

// 程序结束处理
setTimeout(() => {
    console.log('\n🏁 程序执行完成');
    console.log('📊 最终状态：');
    console.log('B1 状态：', b1.getStatus());
    console.log('B2 状态：', b2.getStatus());
    console.log('\n=== 测试完成 ===');
}, 5000);
